[IA64] Merge vpsr.i with evtchn_upcall_mask tosolve one trickish bug
authorawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Thu, 30 Mar 2006 16:55:26 +0000 (09:55 -0700)
committerawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Thu, 30 Mar 2006 16:55:26 +0000 (09:55 -0700)
commitabab07c253c69145781f6b8afef86cb73dda166e
treee637e23576ceceb2104382f5d314f283378c9321
parentcbe13f6dc4162c89e0c5299cc81ac11e3613213f
[IA64] Merge vpsr.i with evtchn_upcall_mask tosolve one trickish bug

Per agreement on the summit, xen/ia64 will move to event channel
model same as xen/x86, under which event is the layer under pirq
(external interrupt), virq, and ipi with the latter three bound
to event ports. Within that model, no external interrupt will be
injected directly and evtchn_upcall_mask is the flag to  control
whether events are deliverable.

So xenlinux needs to operate evtchn_upcall_mask at all places
where it originally operates vpsr.i. However these two flags are
presented at different shared area, and thus xenlinux can't ensure
atomical update on two flags which leaves severe stability issues.
One severe bug comes for this reason where some hypercall may be
restarted infinitely when events pending.

Actually based on description of future model, events become the
superset of external interrupts and thus evtchn_upcall_mask super-
set of vpsr.i (interrupt_delivery_enable). We can merge two flags
into one by removing the latter. By this way, we ensure correctness
and most importantly conform to common code which always assumes
upon evtchn_upcall_mask.

Signed-off-by Kevin Tian <kevin.tian@intel.com>
15 files changed:
linux-2.6-xen-sparse/arch/ia64/xen/drivers/xenia64_init.c
linux-2.6-xen-sparse/arch/ia64/xen/hypercall.S
linux-2.6-xen-sparse/arch/ia64/xen/xenentry.S
linux-2.6-xen-sparse/arch/ia64/xen/xenivt.S
linux-2.6-xen-sparse/arch/ia64/xen/xenpal.S
linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h
xen/arch/ia64/asm-xsi-offsets.c
xen/arch/ia64/xen/domain.c
xen/arch/ia64/xen/hyperprivop.S
xen/arch/ia64/xen/ivt.S
xen/arch/ia64/xen/process.c
xen/arch/ia64/xen/vcpu.c
xen/arch/ia64/xen/xentime.c
xen/include/asm-ia64/domain.h
xen/include/public/arch-ia64.h